package com.ruoyi.config.service.impl;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.check.CheckEmptyUtil;
import com.ruoyi.config.domain.PayConfig;
import com.ruoyi.config.mapper.PayConfigMapper;
import com.ruoyi.config.mapper.WxpayConfigMapper;
import com.ruoyi.config.mapper.ZfbpayConfigMapper;
import com.ruoyi.config.service.IPayConfigService;
import com.ruoyi.config.vo.UpdatePayConfigVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * 支付方式配置Service业务层处理
 *
 * @author ruoyi
 * @date 2025-04-16
 */
@Service
public class PayConfigServiceImpl implements IPayConfigService {
    @Autowired
    private PayConfigMapper payConfigMapper;
    @Resource
    private ZfbpayConfigMapper zfbpayConfigMapper;
    @Resource
    private WxpayConfigMapper wxpayConfigMapper;

    /**
     * 查询支付方式配置
     *
     * @param id 支付方式配置主键
     * @return 支付方式配置
     */
    @Override
    public PayConfig selectPayConfigById(Long id) {
        return payConfigMapper.selectPayConfigById(id);
    }

    /**
     * 查询支付方式配置列表
     *
     * @param payConfig 支付方式配置
     * @return 支付方式配置
     */
    @Override
    public List<PayConfig> selectPayConfigList(PayConfig payConfig) {
        return payConfigMapper.selectPayConfigList(payConfig);
    }

    /**
     * 新增支付方式配置
     *
     * @param payConfig 支付方式配置
     * @return 结果
     */
    @Override
    public int insertPayConfig(PayConfig payConfig) {
        payConfig.setCreateTime(DateUtils.getNowDate());
        return payConfigMapper.insertPayConfig(payConfig);
    }

    /**
     * 修改支付方式配置
     *
     * @param payConfig 支付方式配置
     * @return 结果
     */
    @Override
    public int updatePayConfig(PayConfig payConfig) {
        payConfig.setUpdateTime(DateUtils.getNowDate());
        return payConfigMapper.updatePayConfig(payConfig);
    }

    /**
     * 批量删除支付方式配置
     *
     * @param ids 需要删除的支付方式配置主键
     * @return 结果
     */
    @Override
    public int deletePayConfigByIds(Long[] ids) {
        return payConfigMapper.deletePayConfigByIds(ids);
    }

    /**
     * 删除支付方式配置信息
     *
     * @param id 支付方式配置主键
     * @return 结果
     */
    @Override
    public int deletePayConfigById(Long id) {
        return payConfigMapper.deletePayConfigById(id);
    }

    @Transactional(rollbackFor = RuntimeException.class)
    @Override
    public Integer updateAllPayConfig(List<UpdatePayConfigVo> payConfig) {
        if (!CheckEmptyUtil.isEmpty(payConfig)) {
            for (UpdatePayConfigVo updatePayConfigVo : payConfig) {
                if ("BALANCE".equals(updatePayConfigVo.getCode())) {
                    payConfigMapper.update(updatePayConfigVo.getCode(), updatePayConfigVo.getEnable());
                    if (!CheckEmptyUtil.isEmpty(updatePayConfigVo.getIcon())) {
                        payConfigMapper.updateIcon(updatePayConfigVo.getCode(), updatePayConfigVo.getIcon());
                    }
                }
                if ("WX".equals(updatePayConfigVo.getCode())) {
                    payConfigMapper.update(updatePayConfigVo.getCode(), updatePayConfigVo.getEnable());
                    if (!CheckEmptyUtil.isEmpty(updatePayConfigVo.getIcon())) {
                        payConfigMapper.updateIcon(updatePayConfigVo.getCode(), updatePayConfigVo.getIcon());
                    }
                }
                if ("ZFB".equals(updatePayConfigVo.getCode())) {
                    payConfigMapper.update(updatePayConfigVo.getCode(), updatePayConfigVo.getEnable());
                    if (!CheckEmptyUtil.isEmpty(updatePayConfigVo.getIcon())) {
                        payConfigMapper.updateIcon(updatePayConfigVo.getCode(), updatePayConfigVo.getIcon());
                    }
                }

                if ("mchId".equals(updatePayConfigVo.getCode())) {
                    wxpayConfigMapper.update(updatePayConfigVo.getCode(), updatePayConfigVo.getValue());
                }
                if ("apiV3Key".equals(updatePayConfigVo.getCode())) {
                    wxpayConfigMapper.update(updatePayConfigVo.getCode(), updatePayConfigVo.getValue());
                }
                if ("mchSerialNo".equals(updatePayConfigVo.getCode())) {
                    wxpayConfigMapper.update(updatePayConfigVo.getCode(), updatePayConfigVo.getValue());
                }
                if ("privateKeyPath".equals(updatePayConfigVo.getCode())) {
                    wxpayConfigMapper.update(updatePayConfigVo.getCode(), updatePayConfigVo.getValue());
                }


                if ("AppId".equals(updatePayConfigVo.getCode())) {
                    zfbpayConfigMapper.update(updatePayConfigVo.getCode(), updatePayConfigVo.getValue());
                }
                if ("AppPrivateKey".equals(updatePayConfigVo.getCode())) {
                    zfbpayConfigMapper.update(updatePayConfigVo.getCode(), updatePayConfigVo.getValue());
                }
                if ("PublicKey".equals(updatePayConfigVo.getCode())) {
                    zfbpayConfigMapper.update(updatePayConfigVo.getCode(), updatePayConfigVo.getValue());
                }
                if ("merchantCertPath".equals(updatePayConfigVo.getCode())) {
                    zfbpayConfigMapper.update(updatePayConfigVo.getCode(), updatePayConfigVo.getValue());
                }
                if ("alipayCertPath".equals(updatePayConfigVo.getCode())) {
                    zfbpayConfigMapper.update(updatePayConfigVo.getCode(), updatePayConfigVo.getValue());
                }
                if ("alipayRootCertPath".equals(updatePayConfigVo.getCode())) {
                    zfbpayConfigMapper.update(updatePayConfigVo.getCode(), updatePayConfigVo.getValue());
                }
                if ("zfb_model".equals(updatePayConfigVo.getCode())) {
                    zfbpayConfigMapper.update(updatePayConfigVo.getCode(), updatePayConfigVo.getValue());
                }
            }
        }

        return 1;
    }
}
